#ifndef CONFIG_H
#define CONFIG_H

#include <QString>
#include <QColor>
#include <QFont>
#include <QPoint>
#include <string>
#include <complex>
#include <chrono>

using std::complex;
using std::string;
using namespace std::chrono;

enum class State { free, mouse, keyboard, over, bossdie, win, practice, immortal };

// 模式配置
constexpr State default_state {State::keyboard};        // 默认模式

// 背景配置
const QString bg_path {"./Res/img_bg_level_%1.jpg"};        // 背景文件路径
constexpr int bg_scroll {2};        // 背景滚动速度

// 文字配置
constexpr QColor text_fps {0,0,0};      // fps的显示
constexpr QColor text_win {0,0,255};        // 胜利
constexpr QColor text_lose {255,0,0};       // 寄了
const QFont text_fps_font {QString{"黑体"},15};       // fps字体
const QFont text_stt_font {QString{"黑体"},22};       // 状态字体
constexpr QPoint text_pos_fps {370,750};        // fps位置

// 暂停配置
const QString pause_text {"简陋的暂停界面\n按B返回程序"};       // 暂停文字
const QFont pause_font {QString{"楷体"},22};      // 暂停文字字体
constexpr QColor pause_font_color {255,0,255};      // 暂停文字颜色
constexpr QColor pause_bg_color {255,255,0};        // 暂停背景颜色

// 帧率配置
constexpr int frame_update {100};       // 帧率
constexpr int frame_interval {50};      // 隔这么多帧计算fps

// 自机配置
const QString player_path {"./Res/hero2.png"};      // 图片路径
constexpr int player_speed {2};     // 玩家用键盘的移动速度
constexpr int player_point_r {4};       // 判定点半径
constexpr int player_interval {36};     // 发射子弹间隔
constexpr int player_cols {2};      // 发射子弹列数
constexpr QColor player_brush {255,0,0};        // 判定点颜色
constexpr Qt::Key player_shoot {Qt::Key_Z};     // 射击键

// 敌机配置
const QString enemy_path {"./Res/img-plane_%1.png"};       // 敌机图片路径
constexpr complex<int> enemy_path_index {1,7};      // 敌人图片索引
constexpr int enemy_speed {2};      // 移动速度
constexpr int enemy_interval {50};      // 发射子弹间隔
constexpr int enemy_show_itv {10};      // 敌机出场间隔

// Boss配置
constexpr int boss_health {130};        // Boss血量
const QString boss_path {"./Res/game.ico"};     // Boss路径
constexpr int boss_speed {2};       // Boss进出场速度
constexpr int boss_light {50};      // Boss光线时间
constexpr int boss_stay {100};      // Boss停留（不含光线时间）
constexpr QColor boss_light_c {255,0,0};        // Boss光线颜色
constexpr int boss_light_circle {8};        // 激光圆半径
constexpr int boss_light_b {6};     // Boss光线粗细
constexpr int boss_quit {1300};         // Boss退场重进时间
constexpr int boss_pos {50};        // Boss停留的位置
constexpr int boss_light_sound {1300};      // Boss光线声音频率
constexpr int boss_shoot_interval {130};        // Boss射击间隔，仅练习模式用

// Boss血条配置
constexpr QPoint health_pos {13,13};        // 血条位置
constexpr int health_height {6};        // 血条宽度
constexpr QColor health_bgc {0,0,0};        // 血条背景色
constexpr QColor health_color {255,0,0};        // 血条前景色

// 子弹配置
const QString bullet_player {"./Res/bullet_7.png"};     // 玩家子弹路径
const QString bullet_enemy {"./Res/bullet_3.png"};      // 敌人子弹路径
const QString bullet_boss {"./Res/bullet_6.png"};       // Boss子弹
constexpr int bullet_ply_spd {6};       // 玩家子弹速度
constexpr int bullet_enm_spd {4};       // 敌人子弹速度
constexpr int bullet_boss_spd {3};      // Boss子弹速度
constexpr double bullet_boss_gap {2.0};     // Boss子弹中心间隔

// 爆破配置
const QString bomb_path {"./Res/bomb-%1.png"};      // 爆破路径
constexpr int bomb_count {7};       // 有这么多张图片
constexpr int bomb_interval {5};        // 爆炸间隔
const string bomb_sound_path {R"(.\Res\bomb.wav)"};     // 爆炸声音

// 按键配置
constexpr Qt::Key key_quit {Qt::Key_Q};     // 按Q退出
constexpr Qt::Key key_transform {Qt::Key_Return};       // 切换模式
constexpr Qt::Key key_pause {Qt::Key_P};       // 暂停
constexpr Qt::Key key_back {Qt::Key_B};     // 从暂停中返回
constexpr Qt::Key key_practice {Qt::Key_L};     // 进入练习模式
constexpr Qt::Key key_mokou {Qt::Key_M};        // 不死不灭模式
constexpr Qt::Key key_ret_normal {Qt::Key_K};       // 恢复键盘模式

// 教程录像配置
constexpr Qt::Key guide_key {Qt::Key_G};        // 教程快捷键
const string guide_path {"/Guide/Guide.mp4"};       // 教程录像文件
constexpr int guide_length {0xFF};      // 教程文件全路径的最大长度

// 背景音乐配置
const string bgm_path {R"(.\Res\bg.mp3)"};      // 背景音乐
constexpr milliseconds bgm_wait {1000/frame_update};        // 检查背景音乐停止命令的间隔
const string bgm_alias {"bgm"};     // 背景音乐的别名

// 帮助配置
const QString help_path {"./Help/help.html"};       // 帮助文件
constexpr Qt::Key help_key {Qt::Key_H};     // 帮助快捷键

#endif // CONFIG_H
